package leo.mystudy.leetcode;

import java.util.HashSet;
import java.util.Set;

/**
 * 错误的集合
 *
 * @author chao.li@quvideo.com
 * @date 2018/6/29 15:22
 */
public class SetMismatch {
    //    集合 S 包含从1到 n 的整数。不幸的是，因为数据错误，导致集合里面某一个元素复制了成了集合里面的另外一个元素的值，导致集合丢失了一个整数并且有一个元素重复。
//
//    给定一个数组 nums 代表了集合 S 发生错误后的结果。你的任务是首先寻找到重复出现的整数，再找到丢失的整数，将它们以数组的形式返回。
//
//    示例 1:
//
//    输入: nums = [1,2,2,4]
//    输出: [2,3]
//    注意:
//
//    给定数组的长度范围是 [2, 10000]。
//    给定的数组是无序的。
    public static void main(String[] args) {
        int[] nums = {1, 5, 3, 2, 2, 7, 6, 4, 8, 9};
        new SetMismatch().findErrorNums(nums);
    }

    public int[] findErrorNums(int[] nums) {
        int[] array = new int[nums.length + 1];
        for (int i : nums) {
            array[i]++;
        }
        int[] result = new int[2];
        for (int i = 1; i < array.length; i++) {
            // nums中出现两次的数就是array中2的下标
            if (array[i] == 2) {
                result[0] = i;
            }
            // nums丢失的数就是array中0的下标
            if (array[i] == 0) {
                result[1] = i;
            }
        }
        return result;
    }
}
